查看原文
其他

手写一个简易版数据库!项目经验稳了

Guide JavaGuide 2022-10-28

近期文章精选

这是 JavaGuide 的「优质开源项目推荐」第 11 期,每一期我都会精选 5 个高质量的 Java 开源项目。

前 10 期的「优质开源项目推荐」传送门:

  1. 一款基于 Spring Boot + Vue 的一站式开源持续测试平台
  2. 用 Java 写个沙盒塔防游戏!已上架 Steam,Apple Store
  3. 一款基于 Java 的可视化 HTTP API 接口开发神器
  4. 一款对业务代码无侵入的可视化 Java 进程管理平台
  5. 一个比 Spring 更轻量级的 Web 框架!!!微软、红帽都在用
  6. 轻量!Google 开源了一个简易版 Spring !
  7. 一款跨时代的高性能 Java 框架!启动速度快到飞起
  8. Spring Boot+MyBatis Plus+JWT 问卷系统!开源!
  9. 手写一个简化版的 Spring Cloud!
  10. 这个 SpringBoot+ Vue 开源博客系统太酷炫了!

你可以通过 awesome-java (非常棒的 Java 开源项目集合,找 Java 项目必备)找到更多优质的 Java 开源项目。

  • Github 地址:https://github.com/CodingDocs/awesome-java
  • Gitee 地址:https://gitee.com/SnailClimb/awesome-java
  • 在线阅读:https://javaguide.cn/open-source-project/

MYDB:一个 Java 实现的简单的数据库

MYDB 是一个 Java 语言实现的简易版数据库,部分原理参照自 MySQL、PostgreSQL 和 SQLite。

麻雀虽小,五脏俱全。MYDB 目前已经实现 MVCC、两种事务隔离级别(读提交和可重复读)、死锁处理、简陋的 SQL 解析等关系型数据库的核心功能。

并且,MYDB 作者写了详细的实现教程,教程地址:https://ziyang.moe/cs/project/mydb/

Github 地址:https://github.com/CN-GuoZiyang/MYDB

ip2region:离线 IP 地址定位库

ip2region 是一个高性能离线 IP 地址定位库,10 微秒级别的查询效率,开箱即用,提供了多种主流编程语言(如 Go,Java,Python)的 xdb 数据生成和查询客户端 API。

通过 ip 地址可以通过自治系统(Autonomous System)找到该 ip 对应的具体地址,这样就可以轻松实现网站用户 ip 归属地类似的功能。

  • Gitee:https://gitee.com/lionsoul/ip2region
  • GitHub:https://github.com/lionsoul2014/ip2region

另外,mica-ip2region 这个项目是对这个项目的 stater 封装,目的是方便 Spring Boot 项目使用。

  • Gitee:https://gitee.com/lionsoul/ip2region
  • 官方文档:https://www.dreamlu.net/components/mica-ip2region.html

compileflow:轻量级流程引擎

一个轻量、高性能、可集成、可扩展的流程引擎,淘宝工作流TBBPM引擎之一。

compileflow 专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成java代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。

compileflow 介绍
  • Github :https://github.com/alibaba/compileflow 。
  • 官方 Demo : https://github.com/compileflow/compileflow-demo
  • 基于 IntelliJ IDEA 流程可视化插件 : https://github.com/alibaba/compileflow-idea-designer

CompreFace:免费开源的人脸识别服务

CompreFace 是一个免费开源的人脸识别服务,开箱即用,不需要机器学习技能!

本质上来说,它就是一个基于 Docker 的应用程序,可以用作独立服务器或部署在云中。

  • Github:https://github.com/exadel-inc/CompreFace
  • 官网:https://exadel.com/solutions/compreface/

transmittable-thread-local:定制化的 ThreadLocal

transmittable-thread-local(TTL) 基于 InheritableThreadLocal ,你可以将其看做是定制化的 ThreadLocal ,主要用于复用线程场景(比如线程池)下解决异步执行时上下文传递的问题(比如线程池中获取 ThreadLocal 中的数据)。

ThreadLocal的需求场景即是 transmittable-thread-local的潜在需求场景。下面是几个典型场景例子:

  • 分布式跟踪系统 或 全链路压测(即链路打标)
  • 日志收集记录系统上下文
  • SessionCache
  • 应用容器或上层框架跨应用代码给下层SDK传递信息

Github 地址:https://github.com/alibaba/transmittable-thread-local

下面是 TTL 官方的一些资料:

  • TTL 需求场景说明[1]
  • TTL 实际业务使用场景与设计实现解析[2]

再推荐几篇文章帮助大家理解 TTL 的原理和设计思想:

参考资料

[1]

TTL 需求场景说明: https://github.com/alibaba/transmittable-thread-local/blob/master/docs/requirement-scenario.md

[2]

TTL 实际业务使用场景与设计实现解析: https://github.com/alibaba/transmittable-thread-local/issues/123

[3]

通过 transmittable-thread-local 源码理解线程池线程本地变量传递的原理: https://www.cnblogs.com/throwable/p/12817754.html

[4]

如何在子线程和线程池中使用 ThreadLocal 传输上下文: https://www.jianshu.com/p/4093add7f2cd

··········  END  ··············

👉 专属专栏/一对一提问/简历修改/学习打卡/读书活动,欢迎加入 JavaGuide 知识星球。目前已经 1.3w人加入,即将调整价格。

推荐阅读 :

👉如果本文对你有帮助的话,欢迎 点赞&在看&分享 ,这对我继续分享&创作优质文章非常重要。非常感谢!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存